import filecmp
# print(filecmp.cmp("f1.txt","f1.txt"))
# print(filecmp.cmp("f1.txt","f2.txt"))

# cmpfiles(dir1, dir2, common[, shallow])函数可以用于比较两个文件夹内指定的文件是否相等，参数dir1 和 dir2 是两个文件夹路径，参数common是指定要比较的文件名列表
# print(filecmp.cmpfiles("f1.txt","f2.txt",['f1']))

'''
类dircmp(a,b[,ignore[,hide]])用于创建一个比较目录 a 和 b 的新的目录比较对象。ignore 是需要忽略的文件名列表，
且默认为 filecmp.DEFAULT_IGNORES。hide 是需要隐藏的文件名列表，且默认为 [os.curdir, os.pardir]
report() 将 a 与 b 之间的比较结果打印出来
report_partial_closure() 打印 a 与 b 及共同直接子目录的比较结果
report_full_closure() 打印 a 与 b 及共同子目录比较结果(递归地)
'''
# dirobj = filecmp.dircmp("f1","f2",['f1.txt'])
# print(dirobj.report())

'''
Differ类的作用是比较由文本行组成的序列，并产生可供人阅读的差异或增量信息。
Differ 统一使用 SequenceMatcher 来完成行序列的比较以及相似（接近匹配）行内部字符序列的比较
'''
# difflib 模块是 Python 提供的比较序列差异的功能，包含以下三个类：
# Differ 对字符串进行比较
# HtmlDiff 将比较结果输出为html格式
# SequenceMatcher 任意类型序列的比较 (可以比较字符串)
import difflib
# text1_lines = 'dawwad呵呵'
# text2_lines = 'wwwmokmog./..'
# d = difflib.Differ()
# diff = d.compare(text1_lines, text2_lines)
# print('\n'.join(diff))

'''
HtmlDiff类可以被用来创建HTML表格 (或者说包含表格的html文件) ，两边对应展示或者行对行的展示比对差异结果。

make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

make_table(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

以上两个方法都可以用来生成包含一个内容为比对结果的表格的html文件，并且部分内容会高亮显示
'''
text1 = """text1:   #定义字符串1
This module provides classes and functions for comparing sequences.
including HTML and context and unified diffs.
difflib document v7.4
add string"""

text1_lines = text1.splitlines()                #以行进行分割，以便进行对比
text2 = """text2:           #定义字符串2
This module provides classes and functions for comparing sequences.
including HTML and context and unified diffs.
difflib document v7.5
add string"""

text2_lines = text2.splitlines()
d = difflib.HtmlDiff()            #创建HtmlDiffer()对象
# print(d.make_file(text1_lines,text2_lines))        #采用make_file方法对字符串进行比较

'''
SequenceMatcher类可用于比较任何类型的序列对，只要序列元素为 hashable 对象。
其思路是找到不包含“垃圾”元素的最长连续匹配子序列；所谓“垃圾”元素是指其在某种意义上没有价值，例如空白行或空白符
'''

from pprint import pprint

a = 'pythonclub.org is wonderful'
b = 'Pythonclub.org also wonderful'
s = difflib.SequenceMatcher(None, a, b)

print ("s.get_matching_blocks():")
pprint(s.get_matching_blocks())
print ("s.get_opcodes():")
for tag, i1, i2, j1, j2 in s.get_opcodes():
    print ("%7s a[%d:%d] (%s) b[%d:%d] (%s)" %  (tag, i1, i2, a[i1:i2], j1, j2, b[j1:j2]))
